package pe.gob.onpe.ejb;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 * ProcesoElectoral entity.
 * 
 * @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "PROCESO_ELECTORAL", schema = "SVENP", uniqueConstraints = {})
public class ProcesoElectoral implements java.io.Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -2776286794651753038L;
	
	private Long procesoElectoralId;
	private InstitucionSolicitante institucionSolicitante;
	private String nombre;
	private String descripcion;
	private String estadoproceso;
	private Integer duracionSesion;
	private Integer numeroIntentos;
	private Date fechaCargaPadron;
	
	private Set<RegistroLinea>			registroLineas = new HashSet<RegistroLinea>(0);
	private Set<CronogramaElectoral>	cronogramaElectorals = new HashSet<CronogramaElectoral>(0);
	private Set<ListaCandidatosPostulante>	listaCandidatosPostulantes = new HashSet<ListaCandidatosPostulante>(0);
	private Set<ParametroCedula>			parametroCedulas = new HashSet<ParametroCedula>(0);
	private Set<Procesoelectoraltipoeleccion>	procesoelectoraltipoeleccions = new HashSet<Procesoelectoraltipoeleccion>(0);
	private Set<PadronElectoralSolicitante>		padronElectoralSolicitantes = new HashSet<PadronElectoralSolicitante>(0);

	// Constructors

	/** default constructor */
	public ProcesoElectoral() {
	}

	/** minimal constructor */
	public ProcesoElectoral(Long procesoElectoralId,InstitucionSolicitante institucionSolicitante, String nombre) {
		this.procesoElectoralId = procesoElectoralId;
		this.institucionSolicitante = institucionSolicitante;
		this.nombre = nombre;
	}

	/** full constructor */
	public ProcesoElectoral(Long procesoElectoralId,
							InstitucionSolicitante institucionSolicitante, String nombre,
							String descripcion, String estadoproceso,
							Set<RegistroLinea> registroLineas,
							Set<CronogramaElectoral> cronogramaElectorals,
							Set<ListaCandidatosPostulante> listaCandidatosPostulantes,
							Set<ParametroCedula> parametroCedulas,
							Set<Procesoelectoraltipoeleccion> procesoelectoraltipoeleccions,
							Set<PadronElectoralSolicitante> padronElectoralSolicitantes) {
		this.procesoElectoralId = procesoElectoralId;
		this.institucionSolicitante = institucionSolicitante;
		this.nombre = nombre;
		this.descripcion = descripcion;
		this.estadoproceso = estadoproceso;
		this.registroLineas = registroLineas;
		this.cronogramaElectorals = cronogramaElectorals;
		this.listaCandidatosPostulantes = listaCandidatosPostulantes;
		this.parametroCedulas = parametroCedulas;
		this.procesoelectoraltipoeleccions = procesoelectoraltipoeleccions;
		this.padronElectoralSolicitantes = padronElectoralSolicitantes;
	}

	// Property accessors
	@Id
	@SequenceGenerator(name="sqProcesoElectoral", sequenceName="SQ_PROCESO_ELECTORAL")
	@GeneratedValue(generator="sqProcesoElectoral")
	@Column(name = "PROCESO_ELECTORAL_ID") //, unique = true, nullable = false, insertable = true, updatable = true, precision = 10, scale = 0)
	public Long getProcesoElectoralId() {
		return this.procesoElectoralId;
	}

	public void setProcesoElectoralId(Long procesoElectoralId) {
		this.procesoElectoralId = procesoElectoralId;
	}
	
	@Column(name = "DURACIONSESION")
	public Integer getDuracionSesion() {
		return duracionSesion;
	}

	public void setDuracionSesion(Integer duracionSesion) {
		this.duracionSesion = duracionSesion;
	}

	@Column(name = "NUMEROINTENTOS")
	public Integer getNumeroIntentos() {
		return numeroIntentos;
	}

	public void setNumeroIntentos(Integer numeroIntentos) {
		this.numeroIntentos = numeroIntentos;
	}

	@ManyToOne(cascade = {}, fetch = FetchType.LAZY)
	@JoinColumn(name = "INSTITUCION_SOLICITANTE_ID", unique = false, nullable = false, insertable = true, updatable = true)
	public InstitucionSolicitante getInstitucionSolicitante() {
		return this.institucionSolicitante;
	}

	public void setInstitucionSolicitante(
			InstitucionSolicitante institucionSolicitante) {
		this.institucionSolicitante = institucionSolicitante;
	}

	@Column(name = "NOMBRE", unique = false, nullable = false, insertable = true, updatable = true)
	public String getNombre() {
		return this.nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	@Column(name = "DESCRIPCION", unique = false, nullable = true, insertable = true, updatable = true)
	public String getDescripcion() {
		return this.descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	@Column(name = "ESTADOPROCESO", unique = false, nullable = true, insertable = true, updatable = true)
	public String getEstadoproceso() {
		return this.estadoproceso;
	}

	public void setEstadoproceso(String estadoproceso) {
		this.estadoproceso = estadoproceso;
	}
	
	@Column(name = "FECHACARGAPADRON", unique = false, nullable = true, insertable = true, updatable = true)
	public Date getFechaCargaPadron() {
		return fechaCargaPadron;
	}

	public void setFechaCargaPadron(Date fechaCargaPadron) {
		this.fechaCargaPadron = fechaCargaPadron;
	}
	
	

	@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "procesoElectoral")
	public Set<RegistroLinea> getRegistroLineas() {
		return this.registroLineas;
	}

	public void setRegistroLineas(Set<RegistroLinea> registroLineas) {
		this.registroLineas = registroLineas;
	}

	@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "procesoElectoral")
	public Set<CronogramaElectoral> getCronogramaElectorals() {
		return this.cronogramaElectorals;
	}

	public void setCronogramaElectorals(
			Set<CronogramaElectoral> cronogramaElectorals) {
		this.cronogramaElectorals = cronogramaElectorals;
	}

	@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "procesoElectoral")
	public Set<ListaCandidatosPostulante> getListaCandidatosPostulantes() {
		return this.listaCandidatosPostulantes;
	}

	public void setListaCandidatosPostulantes(
			Set<ListaCandidatosPostulante> listaCandidatosPostulantes) {
		this.listaCandidatosPostulantes = listaCandidatosPostulantes;
	}

	@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "procesoElectoral")
	public Set<ParametroCedula> getParametroCedulas() {
		return this.parametroCedulas;
	}

	public void setParametroCedulas(Set<ParametroCedula> parametroCedulas) {
		this.parametroCedulas = parametroCedulas;
	}

	@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "procesoElectoral")
	public Set<Procesoelectoraltipoeleccion> getProcesoelectoraltipoeleccions() {
		return this.procesoelectoraltipoeleccions;
	}

	public void setProcesoelectoraltipoeleccions(
			Set<Procesoelectoraltipoeleccion> procesoelectoraltipoeleccions) {
		this.procesoelectoraltipoeleccions = procesoelectoraltipoeleccions;
	}

	@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "procesoElectoral")
	public Set<PadronElectoralSolicitante> getPadronElectoralSolicitantes() {
		return this.padronElectoralSolicitantes;
	}

	public void setPadronElectoralSolicitantes(
			Set<PadronElectoralSolicitante> padronElectoralSolicitantes) {
		this.padronElectoralSolicitantes = padronElectoralSolicitantes;
	}

}